package com.mars.admin.common.util;

import com.alibaba.fastjson2.JSONObject;
import com.mars.admin.common.dto.ImageInfoDto;
import com.mars.admin.common.request.PublishPostRequest;
import com.mars.admin.modules.post.entity.Post;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 帖子工具类
 *
 * @author Mars
 * @version 1.0
 * @date 2025-01-07
 */
public class PostUtil {

    /**
     * 验证发布帖子请求参数
     *
     * @param request 请求参数
     * @return 错误信息，如果为null表示验证通过
     */
    public static String validatePublishRequest(PublishPostRequest request) {
        if (request.getTitle() == null || request.getTitle().trim().isEmpty()) {
            return "帖子标题不能为空";
        }
        if (request.getContent() == null || request.getContent().trim().isEmpty()) {
            return "帖子内容不能为空";
        }
        if (request.getImgs() == null || request.getImgs().isEmpty()) {
            return "请上传至少一张图片";
        }
        if (request.getTopicIds() == null || request.getTopicIds().isEmpty()) {
            return "请选择至少一个话题";
        }
        return null;
    }

    /**
     * 验证更新帖子请求参数
     *
     * @param request 请求参数
     * @return 错误信息，如果为null表示验证通过
     */
    public static String validateUpdateRequest(PublishPostRequest request) {
        if (request.getId() == null) {
            return "帖子ID不能为空";
        }
        return validatePublishRequest(request);
    }

    /**
     * 从图片信息列表中提取有效的图片URL
     *
     * @param imageInfoList 图片信息列表
     * @return 图片URL列表
     */
    public static List<String> extractImageUrls(List<ImageInfoDto> imageInfoList) {
        return imageInfoList.stream()
                .filter(img -> "success".equals(img.getStatus()) && img.getUrl() != null)
                .map(ImageInfoDto::getUrl)
                .collect(Collectors.toList());
    }

    /**
     * 根据请求参数构建Post对象（用于发布）
     *
     * @param request 请求参数
     * @return Post对象
     */
    public static Post buildPostForPublish(PublishPostRequest request) {
        Post post = new Post();
        post.setTitle(request.getTitle().trim());
        post.setContent(request.getContent().trim());
        
        // 处理图片数据
        List<String> imageUrls = extractImageUrls(request.getImgs());
        post.setImages(JSONObject.toJSONString(imageUrls));
        post.setTopics(JSONObject.toJSONString(request.getTopicIds()));
        // 设置默认值
        post.setPostType(1); // 图文帖子
        post.setVisibility(1); // 公开可见
        post.setAllowComment(1); // 允许评论
        post.setStatus(1); // 正常状态
        post.setAuditStatus(1); // 待审核
        post.setCreateTime(LocalDateTime.now());
        post.setUpdateTime(LocalDateTime.now());
        
        return post;
    }

    /**
     * 根据请求参数构建Post对象（用于更新）
     *
     * @param request 请求参数
     * @return Post对象
     */
    public static Post buildPostForUpdate(PublishPostRequest request) {
        Post post = new Post();
        post.setId(request.getId());
        post.setTitle(request.getTitle().trim());
        post.setContent(request.getContent().trim());
        
        // 处理图片数据
        List<String> imageUrls = extractImageUrls(request.getImgs());
        post.setImages(JSONObject.toJSONString(imageUrls));
        post.setTopics(JSONObject.toJSONString(request.getTopicIds()));
        post.setUpdateTime(LocalDateTime.now());
        
        return post;
    }
} 